package com.spsoft.core.model.leqidmz.param;

import com.spsoft.core.annotation.EnumValue;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;

@ApiModel(value = "数电红字确认单明细信息申请")
@EqualsAndHashCode(callSuper = true)
@Data
public class ApplyRedConfirmDetailParam extends BaseUserInfoParam {

    /**
     * 录入方身份
     */
    @ApiModelProperty(value = "录入方身份" , required = true)
    @NotBlank(message = "录入方身份不能为空")
    @EnumValue(strValues = {"0", "1"}, message = "录入方身份只能是：0 销方 1 购方")
    private String lrfsf;

    /**
     *（销售方）统一社会信用代码/纳税人识别号/身份证件号码
     */
    @ApiModelProperty(value = "（销售方）统一社会信用代码/纳税人识别号/身份证件号码", required = true)
    @NotBlank(message = "销售方纳税人识别号不能为空")
    private String xsfnsrsbh;

    /**
     * 销售方名称
     */
    @ApiModelProperty(value = "销售方名称", required = true)
    @NotBlank(message = "销售方名称不能为空")
    private String xsfmc;

    /**
     * （购买方）统一社会信用代码/纳税人识别号/身份证件号码
     */
    @ApiModelProperty(value = "（购买方）统一社会信用代码/纳税人识别号/身份证件号码")
    private String gmfnsrsbh;

    /**
     * 购买方名称
     */
    @ApiModelProperty(value = "购买方名称" , required = true)
    @NotBlank(message = "购买方名称不能为空")
    private String gmfmc;

    /**
     * 蓝字发票代码
     */
    @ApiModelProperty(value = "蓝字发票代码")
    private String lzfpdm;

    /**
     * 蓝字发票号码
     */
    @ApiModelProperty(value = "蓝字发票号码", required = true)
    @NotBlank(message = "蓝字发票号码不能为空")
    private String lzfphm;

    /**
     * 是否纸质发票标志
     */
    @ApiModelProperty(value = "是否纸质发票标志", required = true)
    @NotBlank(message = "是否纸质发票标志不能为空")
    @EnumValue(strValues = {"Y", "N"}, message = "是否纸质发票标志只能是：Y 纸质发票 N 电子发票")
    private String sfzzfpbz;

    /**
     * 蓝字发票开票日期
     */
    @ApiModelProperty(value = "蓝字发票开票日期", required = true)
    @NotNull(message = "蓝字发票开票日期不能为空")
    private String lzkprq;

    /**
     * 蓝字发票合计金额
     */
    @ApiModelProperty(value = "蓝字发票合计金额", required = true)
    @NotNull(message = "蓝字发票合计金额不能为空")
    private BigDecimal lzhjje;

    /**
     * 蓝字发票合计税额
     */
    @ApiModelProperty(value = "蓝字发票合计税额", required = true)
    @NotNull(message = "蓝字发票合计税额不能为空")
    private BigDecimal lzhjse;

    /**
     * 蓝字发票票种代码
     */
    @ApiModelProperty(value = "蓝字发票票种代码", required = true)
    @NotBlank(message = "蓝字发票票种代码不能为空")
    @EnumValue(strValues = {"01", "02", "03", "04"}, message = "蓝字发票票种代码只能是：01 增值税专用发票 02 普通发票 03 机动车统一销售发票 04二手车统一销售发票")
    private String lzfppzDm;

    /**
     * 蓝字发票特定要素类型代码
     */
    @ApiModelProperty(value = "蓝字发票特定要素类型代码")
    @EnumValue(strValues = {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "20"},
               message = "特定要素只能是：空 非特定要素 01 成品油发票 02 稀土发票 03 建筑服务发票 04 货物运输服务发票 05 不动产销售服务发票 " +
                         "06 不动产租赁服务发票 07 代收车船税 08 通行费 09 旅客运输服务发票 10 医疗服务（住院）发票 11 医疗服务（门诊）发票 " +
                         "12 自产农产品销售发票 13 拖拉机和联合收割机发票 14 机动车 15 二手车 16 农产品收购发票 17 光伏收购发票 18 卷烟发票 20 农产品")
    private String lzfpTdyslxDm;

    /**
     * 红字冲销金额
     */
    @ApiModelProperty(value = "红字冲销金额", required = true)
    @NotNull(message = "红字冲销金额不能为空")
    private BigDecimal hzcxje;

    /**
     * 红字冲销税额
     */
    @ApiModelProperty(value = "红字冲销税额", required = true)
    @NotNull(message = "红字冲销税额不能为空")
    private BigDecimal hzcxse;

    /**
     * 红字发票冲红原因代码
     */
    @ApiModelProperty(value = "红字发票冲红原因代码", required = true)
    @NotBlank(message = "红字发票冲红原因代码不能为空")
    @EnumValue(strValues = {"01", "02", "03", "04"}, message = "红字发票冲红原因代码只能是：01 开票有误 02 销货退回 03 服务中止 04 销售折让")
    private String chyyDm;

    /**
     * 红字确认信息明细列表
     */
    @Valid
    @ApiModelProperty(value = "红字确认信息明细列表")
    private List<Hzqrxxmx> hzqrdmxList;

    @ApiModel(value = "红字确认信息明细")
    @Data
    public static class Hzqrxxmx {

        /**
         * 序号
         */
        @ApiModelProperty(value = "序号", required = true)
        @NotNull(message = "序号不能为空")
        private Long xh;

        /**
         * 蓝字发票明细序号
         */
        @ApiModelProperty(value = "蓝字发票明细序号", required = true)
        @NotNull(message = "蓝字发票明细序号不能为空")
        private Long lzmxxh;

        /**
         * 商品和服务税收分类合并编码
         */
        @ApiModelProperty(value = "商品和服务税收分类合并编码", required = true)
        @NotBlank(message = "商品和服务税收分类合并编码不能为空")
        private String sphfwssflhbbm;

        /**
         * 货物或应税劳务、服务名称
         */
        @ApiModelProperty(value = "货物或应税劳务、服务名称", required = true)
        @NotBlank(message = "货物或应税劳务、服务名称不能为空")
        private String hwhyslwfwmc;

        /**
         * 商品服务简称
         */
        @ApiModelProperty(value = "商品服务简称", required = true)
        @NotBlank(message = "商品服务简称不能为空")
        private String spfwjc;

        /**
         * 项目名称
         */
        @ApiModelProperty(value = "项目名称", required = true)
        @NotBlank(message = "项目名称不能为空")
        private String xmmc;

        /**
         * 规格型号
         */
        @ApiModelProperty(value = "规格型号")
        private String ggxh;

        /**
         * 单位
         * 必须与蓝票“单位”保持一致
         */
        @ApiModelProperty(value = "单位")
        private String dw;

        /**
         * 单价
         */
        @ApiModelProperty(value = "单价")
        private String fpspdj;

        /**
         * 数量
         */
        @ApiModelProperty(value = "数量")
        private String fpspsl;

        /**
         * 金额
         */
        @ApiModelProperty(value = "金额", required = true)
        @NotNull(message = "金额不能为空")
        private BigDecimal je;

        /**
         * 税率
         */
        @ApiModelProperty(value = "税率", required = true)
        @NotNull(message = "税率不能为空")
        private BigDecimal sl1;

        /**
         * 税额
         */
        @ApiModelProperty(value = "税额", required = true)
        @NotNull(message = "税额不能为空")
        private BigDecimal se;
    }
}
